package demo;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-05-09
 * Time: 16:00
 */

class Shape{
    public void draw(){}
}

class Rect extends Shape{

    public void draw(){System.out.println("♦");}}

class Flower extends Shape{
    public void draw(){
        System.out.println("❀");
    }
}


public class Test {

    //使用多态
    public static void main(String[] args) {
        Rect rect = new Rect();
        Flower flower = new Flower();
        Shape[] shapes = {flower,rect};// 数组 存放相同数据类型的集合 父子类关系
        for (Shape shape:shapes) {
            shape.draw();// 拿的不一样 调用的就不一样
        }
    }

    //如果没有多态 将用if else 判断将要输出谁
    public static void main3(String[] args) {
        Rect rect = new Rect();
        Flower flower = new Flower();
        String[] Shapes={"flower","rect","rect","flower"};//如果将要以这样的顺序输出 没有多态的情况下 只能用if else 来判断
        for (String s:Shapes) {
            if (s.equals("flower")){
                flower.draw();
            }else if (s.equals("rect")){
                rect.draw();
            }
        }
    }

    // 多态 通过同一个引用 调用同一个draw方法 有不同的表现形式
    public static void drawMap(Shape shape){ // 发生向上转型
        shape.draw(); // 发生动态绑定
    }//自始至终只调用了drawMap这个函数
    public static void main2(String[] args) {
        drawMap(new Flower());
        drawMap(new Rect());
    }// 虽然传的参数类型不同 但是是他的子类

    public static void main1(String[] args) {
        Shape shape = new Rect();
        shape.draw();
        Shape shape1 = new Flower();
        shape1.draw();
    }
}
